﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ProjetoSolo.QueroGas.Dominio.Entidades
{
    public class Usuario : Entidade
    {
        private int idUsuario;
        private string nome;
        private string senha;
        private string email;
        private bool ativo;
        private DateTime dataCadastro;
        private DateTime ultimoLogin;

        public Usuario()
        {
            this.ativo = true;
            this.dataCadastro = DateTime.Now;
            this.ultimoLogin = DateTime.Now;
        }

        public Usuario(string nome, string senha, string email) : this()
        {
            this.Nome = nome;
            this.Senha = senha;
            this.Email = email;
        }

        [Required (ErrorMessage = "O id do usuário deve ser informado.")]
        public int IdUsuario { get; set; }

        [DisplayName("nome")]
        [Required (ErrorMessage = "O nome do usuário deve ser informado.")]
        [StringLength (50, MinimumLength = 3, ErrorMessage = "O nome do usuário deve ter entre 3 e 50 letras.")]
        public string Nome
        {
            get { return this.nome;  }
            set { Validator.ValidateProperty(value, new ValidationContext(this, null, null) { MemberName = "Nome"}); this.nome = value; }
        }

        [DisplayName("senha")]
        [Required (ErrorMessage = "A senha do usuário deve ser informada.")]
        public string Senha
        {
            get { return this.senha; }
            set { Validator.ValidateProperty(value, new ValidationContext(this, null, null) { MemberName = "Senha" }); this.senha = value;  }
        }

        [DisplayName("senha-confirmação")]
        [Required(ErrorMessage = "A senha de confirmaçao deve ser informada.")]
        [Compare("Senha")]
        [DataType(DataType.Password)]
        public string SenhaConfirmacao
        {
            get { return this.senha; }
            set { Validator.ValidateProperty(value, new ValidationContext(this, null, null) { MemberName = "Senha" }); this.senha = value; }
        }

        [DisplayName("email")]
        [Required (ErrorMessage = "O email do usuário deve ser informado.")]
        public string Email
        {
            get { return this.email; }
            set { Validator.ValidateProperty(value, new ValidationContext(this, null, null) { MemberName = "Email"}); this.email = value; }
        }
        
        public bool Ativo
        {
            get { return this.ativo; }
            private set { this.ativo  = value; }
        }

        public DateTime DataCadastro
        {
            get { return this.dataCadastro;  }
            private set { this.dataCadastro = value; }
        }

        public DateTime UltimoLogin
        {
            get { return this.ultimoLogin; }
            private set { this.dataCadastro = value; }
        }

        public void Ativar()
        {
            this.ativo = true;
        }

        public void Inativar()
        {
            this.ativo = false;
        }
    }
}